package com.chenyun.gateway.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 网关白名单配置
 *
 * @author Lonni
 * @date 2022-11-19 12:15
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(value = "chenyun.satoken.white")
@Slf4j
@Component
public class WhiteUrl implements Serializable {
    private static final long serialVersionUID = -1457509092353656116L;

    private String id;
    private static List<String> igpath = new ArrayList<>();
    private static volatile Boolean isLoadPermissionUrl = false;

    static {
        log.debug("静态代码块被执行....");
        igpath.add("/feign/**");
        igpath.add("/doc.html");
        igpath.add("/webjars/**");
        igpath.add("/api-docs-ext");
        igpath.add("/api-docs");
        igpath.add("/swagger-ui.html");
        igpath.add("/swagger-resources/**");
        igpath.add("/actuator/**");
        igpath.add("/v2/**");
        igpath.add("/css/**");
        igpath.add("/js/**");
        igpath.add("/**/*.html");
        igpath.add("/**/*.css");
        igpath.add("/**/*.js");
        igpath.add("/images/**");
        igpath.add("/favicon.ico");
        igpath.add("/service-worker.js");
        igpath.add("/wagger-resources/**");
        //登录模块
        igpath.add("/auth/token/getToken");
    }

    private List<String> urls;


    /**
     * 获取所有白名单
     *
     * @return List<String>
     */
    public List<String> getAllIgnorePath() {
        log.debug("获取白名单配置:{}", this.getUrls().toString());
        if (isLoadPermissionUrl) {
            return igpath;
        }
        if (this.urls != null && !this.urls.isEmpty()) {
            igpath.addAll(this.urls);
        }
        isLoadPermissionUrl = true;
        return igpath;
    }


    public List<String> getIgpath() {
        return igpath;
    }

    /**
     * 添加白名单路径
     * @param path 白名单理由
     */
    public void addIgnorePath(String path) {
        final List<String> igpath = this.getIgpath();
        if (!igpath.contains(path)) {
            this.getIgpath().add(path);
        }

    }
}
